// 类模板继承
#include <iostream>
using namespace std;
template<class T>
class Father
{
public:
    T objf;
};
// 继承方法1: 明确指出父类模板类型
class Son1: public Father<int>
{
public:
    int m_a;
};
// 继承方法2: 子类使用模板
template<class T1, class T2>
class Son2: public Father<T2>
{
public:
    T1 objs;
    Son2(T1 t1, T2 t2);
    // 类外实现
    void show();
};
// 有参构造的类外实现
template<class T1, class T2>
Son2<T1, T2>::Son2(T1 t1, T2 t2)
{
    this->objf = t2;
    this->objs = t1;
}
// 普通成员函数类外实现
template<class T1, class T2>
void Son2<T1, T2>::show()
{
    cout << this->objf << endl;
    cout << objs << endl;
}
void test1()
{
    Son1 s1;
    Son2<string, int> s2("lxy", 20);
    s2.show();
}
int main(void)
{
    test1();

    return 0;
}